public class code1 {

    // 力扣 150 加油站

    public static int canCompleteCircuit(int[] gas, int[] cost) {
        // 定义一个变量，来记录加油站的长度
        int length = gas.length;
        // 定义一个变量，记录当前的 油箱中剩余油量
        int last = 0;
        // 定义一个变量，来记录油箱中最小油量
        int mingas = Integer.MAX_VALUE;
        // 定义一个变量，记录当油箱中油量最小时，此时存在的加油站位置
        int minIndex = 0;

        for(int i = 0; i < length; i++) {
            // 油箱中剩余的油，是需要之前的油 + 上之后路程上消耗的油的
            last += gas[i] - cost[i];
            // 此时当剩余油量小于记录的最小油量时，更新一下最小油量
            if(last < mingas) {
                mingas = last;
                // 并且将该位置的加油站的下标记录
                minIndex = i;
            }
        }

        // 处理特殊情况
        // 当只存在一个加油站时，此时也只有一段路程时，只要 加油站的油量比路程耗油大，就可以来回跑
        if(mingas > 0) {
            return 0;
        }

        // 当只要出现有剩余油量小于 0 的情况，就表明根本无法做到绕路一圈
        if(last < 0) {
            return -1;
        } else {
            // 只要剩余的油量大于 0 ，直接去寻找该位置的下一个点位
            // 也就是说，当前点位是最小油量，能到最后一个位置，剩余的油量也就是全程中最少的
            // 只要向前一步，就能得到进入时的加油站点位
            return (minIndex + 1) % length;
        }
    }

    public static void main(String[] args) {
        int[] gas = {2,0,0,0,0};
        int[] cost = {1,0,0,0,0};
        int re = canCompleteCircuit(gas, cost);

        System.out.println(re);
    }
}
